// 导入axios HTTP请求库
import axios from 'axios'
// 导入路由对象，用于路由跳转
import router from "@/router";

// 创建一个新的axios实例，配置基础URL和超时时间
const request = axios.create({
    baseURL: 'http://localhost:8099/', // 后端API服务器地址
    timeout: 30000, // 请求超时时间，单位毫秒
})

// 请求拦截器
// 在发送请求前对请求进行预处理
// 主要功能：设置请求头信息，添加token等认证信息
request.interceptors.request.use(config => {
        // 设置Content-Type为JSON格式
        config.headers['Content-Type'] = 'application/json;charset=UTF-8'
        // 从本地存储获取用户信息，提取token
        let user = JSON.parse(localStorage.getItem("my-user") || '{}' )
        // 将token添加到请求头中，用于后端身份验证
        config.headers['token'] = user.token
        // config.headers['token'] = '张三'
        return config
    }, error => {
        // 处理请求错误
        console.error("request error: " + error)
        return Promise.reject(error)
    }
);

// 响应拦截器
// 在接收到响应后统一处理结果
// 主要功能：处理返回的数据，统一错误处理，token失效处理等
request.interceptors.response.use(response => {
        // 获取响应数据
        let res = response.data

        // 如果响应数据是字符串，尝试解析为JSON
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }

        // 如果返回401状态码，说明token已失效，跳转到登录页面
        if (res.code==='401'){
            router.push('/login')
        }

        return res;
    },
    error => {
        // 处理响应错误
        console.error("request error: " + error)
        return Promise.reject(error)
    }
)

// 导出封装好的请求工具
export default request